package cn.kent.heima.high.garbage;


import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;

/**
 * 演示 弱引用 使用
 * -Xmx20m -XX:+PrintGCDetails -verbose:gc
 * 第十次触发了一次FullGC,将前面所有加入的弱引用对象清除,只保留了最后一个 原因: 弱引用对象本身也占有一定内存
 */
public class Demo_16 {
    private static final int _4Mb = 1024 * 1024 * 4;

    public static void main(String[] args) {
        List<WeakReference<byte[]>> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            WeakReference<byte[]> ref = new WeakReference<>(new byte[_4Mb]);
            list.add(ref);
            for (WeakReference<byte[]> w : list) {
                System.out.print(w.get() + " ");
            }
            System.out.println();
        }
        System.out.println("循环结束:" + list.size());


        // 弱引用队列使用类似 软引用队列
//        WeakReferenceQueue<byte[]> queue = new WeakReferenceQueue<>();
//        WeakReference<byte[]> weakReference = new WeakReference<>(new byte[_4Mb]);
//        queue.add(weakReference.get());
//        Iterator<? super byte[]> iterator = queue.iterator();
//        while (iterator.hasNext()) {
//            iterator.remove();
//        }
    }
}
